﻿#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H

#include <QOpenGLFunctions_3_3_Core>
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QOpenGLWidget>

/*
    创建纹理的过滤，在放大缩小的时候，通常像素的改变，指由大变小或有小变大：
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );// 缩小
    图形纹理的视觉效果，及由进到远或者由远到进：
        m_textureSamll->generateMipMaps();// 生成远近的变化
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); // 远-》近
*/

class MyOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_3_3_Core {
    Q_OBJECT
  public:
    enum Shape { None, Rect, Circle, Triangle };

    MyOpenGLWidget( QWidget *parent = nullptr );
    ~MyOpenGLWidget();

    void drawShape( Shape shape );
    void setWireframe( bool wireframe );

  protected:
    virtual void initializeGL();
    virtual void resizeGL( int w, int h );
    virtual void paintGL();

  signals:

  public slots:

  private:
    Shape                m_shape;
    QOpenGLShaderProgram m_shaderProgram;
    QOpenGLTexture *     m_textureWall;  // 1 步骤一
    QOpenGLTexture *     m_textureFreep; // 1 步骤一
    QOpenGLTexture *     m_textureSamll; // 1 步骤一
};

#endif // MYOPENGLWIDGET_H
